﻿Imports SuporteDominio
Imports SuporteRepository
Imports Microsoft.VisualStudio.TestTools.UnitTesting
<TestClass()>Public Class UsuarioService

    Private usuarioDB As IUsuario = New UsuarioDAO
    Private acessoDB As IAcesso = New AcessoDAO


    ''' <summary>
    ''' Verifica se o usuario existe e regristra o acesso
    ''' </summary>
    ''' <param name="parLogin"></param>
    ''' <param name="parSenha"></param>
    ''' <param name="parPerfil"></param>
    ''' <param name="parDataAcesso"></param>
    ''' <param name="parIpUsuario"></param>
    ''' <returns>Se a ação for executada com sucesso</returns>
    ''' <remarks></remarks>
    ''' 
    <TestMethod()> Public Function Login(parLogin As String, parSenha As String, parDataAcesso As DateTime, parIpUsuario As String, parIdPerfil As Integer) As Usuario
        Dim fUsuario As Usuario
        'Verifica se usuario existe


        If usuarioDB.ExisteUsuario(parLogin, parSenha) Then
            'Se usuario existe suas informações são carregadas
            fUsuario = usuarioDB.BuscarUsuario(parLogin, parSenha)
            Assert.IsNotNull(fUsuario)
            'Valida e o perfil passado é valido
            If usuarioDB.ValidaUsuarioPerfil(parIdPerfil, fUsuario.ID_USUARIO) Then
                'O perfil é carregado no usuario
                fUsuario.PERFIL = usuarioDB.BuscaPerfil(parIdPerfil)
                'É gravado o acesso no banco
                acessoDB.RegistrarAcesso(fUsuario.ID_USUARIO, parDataAcesso, parIpUsuario)
            Else
                fUsuario = Nothing
            End If
        Else
            fUsuario = Nothing
        End If
        Return fUsuario
    End Function
    ''' <summary>
    ''' Verifica se o usuario apenas existe
    ''' </summary>
    ''' <param name="parLogin"></param>
    ''' <param name="parSenha"></param>
    ''' <returns>Retorna apenas se o usuario existe ou não</returns>
    ''' <remarks></remarks>
    Public Function ExisteUsuario(parLogin As String, parSenha As String) As Boolean
        Return usuarioDB.ExisteUsuario(parLogin, parSenha)
    End Function
    ''' <summary>
    ''' Cadastra o usuario com o perfil e o usuario responsavel pelo cadastro
    ''' </summary>
    ''' <param name="parUsuario"></param>
    ''' <param name="parPerfil"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function CadastrarUsuario(parUsuario As Usuario, parCadastrou As Usuario, parDadaCadastro As DateTime) As Boolean
        Dim result As Boolean = False
        If Not usuarioDB.ExisteUsuario(parUsuario.LOGIN, parUsuario.SENHA) Then
            result = usuarioDB.Cadastrar(parUsuario, parCadastrou, parDadaCadastro)
        End If
        Return result
    End Function

    Function AtualizarUsuario(parIdUsuario As Integer, parUsuarioAtualizado As Usuario) As Boolean
        Dim fUsuario As Usuario = usuarioDB.BuscarUsuario(parIdUsuario)
        Dim fRetorno As Boolean = False
        If Not fUsuario Is Nothing Then
            If usuarioDB.ExisteUsuario(fUsuario.LOGIN, fUsuario.SENHA) Then
                fUsuario = parUsuarioAtualizado
                fRetorno = True
            End If
        End If
        Return fRetorno
    End Function

    Function DesativarUsuario(parUsuario As Usuario) As Boolean
        parUsuario.ATIVO = False
        Dim fRetorno As Boolean = False
        Try
            AtualizarUsuario(parUsuario.ID_USUARIO, parUsuario)
            fRetorno = True
        Catch ex As Exception
        End Try
        Return fRetorno
    End Function




End Class
